package org.jim.core.packets.pub.consts;

import org.jim.core.utils.DynamicEnumUtil;

public enum Command {

    /**########################公共部分###########################################**/
    //<editor-fold desc="公共部分">
    /**
     * <code>COMMAND_UNKNOW = 0;</code>
     */
    COMMAND_UNKNOW(0),
    /**
     * <pre>
     * 握手请求，含http的websocket握手请求
     * </pre>
     * <p>
     * <code>COMMAND_HANDSHAKE_REQ = 1;</code>
     */
    COMMAND_HANDSHAKE_REQ(1),
    /**
     * <pre>
     * 握手响应，含http的websocket握手响应
     * </pre>
     * <p>
     * <code>COMMAND_HANDSHAKE_RESP = 2;</code>
     */
    COMMAND_HANDSHAKE_RESP(2),
    /**
     * <pre>
     * 鉴权请求
     * </pre>
     * <p>
     * <code>COMMAND_AUTH_REQ = 3;</code>
     */
    COMMAND_AUTH_REQ(3),
    /**
     * <pre>
     * 鉴权响应
     * </pre>
     * <p>
     * <code>COMMAND_AUTH_RESP = 4;</code>
     */
    COMMAND_AUTH_RESP(4),
    /**
     * <pre>
     * 登录请求
     * </pre>
     * <p>
     * <code>COMMAND_LOGIN_REQ = 5;</code>
     */
    COMMAND_LOGIN_REQ(5),
    /**
     * <pre>
     * 登录响应
     * </pre>
     * <p>
     * <code>COMMAND_LOGIN_RESP = 6;</code>
     */
    COMMAND_LOGIN_RESP(6),

    /**
     * <pre>
     * 申请进入群组
     * </pre>
     * <p>
     * <code>COMMAND_JOIN_GROUP_REQ = 7;</code>
     */
    COMMAND_JOIN_GROUP_REQ(7),
    /**
     * <pre>
     * 申请进入群组响应
     * </pre>
     * <p>
     * <code>COMMAND_JOIN_GROUP_RESP = 8;</code>
     */
    COMMAND_JOIN_GROUP_RESP(8),
    /**
     * <pre>
     * 进入群组通知
     * </pre>
     * <p>
     * <code>COMMAND_JOIN_GROUP_NOTIFY_RESP = 9;</code>
     */
    COMMAND_JOIN_GROUP_NOTIFY_RESP(9),
    /**
     * <pre>
     * 退出群组通知
     * </pre>
     * <p>
     * <code>COMMAND_EXIT_GROUP_NOTIFY_RESP = 10;</code>
     */
    COMMAND_EXIT_GROUP_NOTIFY_RESP(10),


    /**
     * <pre>
     * 发出撤消消息指令(管理员可以撤消所有人的消息，自己可以撤消自己的消息)
     * </pre>
     * <p>
     * <code>COMMAND_CANCEL_MSG_REQ = 15;</code>
     */
    COMMAND_CANCEL_MSG_REQ(15),
    /**
     * <pre>
     * 收到撤消消息指令
     * </pre>
     * <p>
     * <code>COMMAND_CANCEL_MSG_RESP = 16;</code>
     */
    COMMAND_CANCEL_MSG_RESP(16),


    /**
     * <pre>
     * 心跳请求
     * </pre>
     * <p>
     * <code>COMMAND_HEARTBEAT_REQ = 13;</code>
     */
    COMMAND_HEARTBEAT_REQ(13),
    /**
     * <pre>
     * 关闭请求
     * </pre>
     * <p>
     * <code>COMMAND_CLOSE_REQ = 14;</code>
     */
    COMMAND_CLOSE_REQ(14),


    /**
     * <pre>
     * 获取用户信息;
     * </pre>
     * <p>
     * <code>COMMAND_GET_USER_REQ = 17;</code>
     */
    COMMAND_GET_USER_REQ(17),
    /**
     * <pre>
     * 获取用户信息响应;
     * </pre>
     * <p>
     * <code>COMMAND_GET_USER_RESP = 18;</code>
     */
    COMMAND_GET_USER_RESP(18),
    //</editor-fold>
    /**########################公共部分 end###########################################**/


    /**########################客服部分 start###########################################**/
    //<editor-fold desc="客服部分">
    /**
     * <pre>
     * 聊天请求
     * </pre>
     * <p>
     * <code>COMMAND_CHAT_REQ = 11;</code>
     */
    COMMAND_CHAT_REQ(11),
    /**
     * <pre>
     * 聊天响应
     * </pre>
     * <p>
     * <code>COMMAND_CHAT_RESP = 12;</code>
     */
    COMMAND_CHAT_RESP(12),


    /**
     * <pre>
     * 获取聊天消息;
     * </pre>
     * <p>
     * <code>COMMAND_GET_MESSAGE_REQ = 19;</code>
     */
    COMMAND_GET_MESSAGE_REQ(19),
    /**
     * <pre>
     * 获取聊天消息响应;
     * </pre>
     * <p>
     * <code>COMMAND_GET_MESSAGE_RESP = 20;</code>
     */
    COMMAND_GET_MESSAGE_RESP(20),

    /**
     * 创建以及检查SESSION,如果是新建可以携带 接入的客服信息+sessionID信息
     */
    COMMAND_SESSION_REQ(30),

    /**
     * 创建以及检查session的返回指令
     */
    COMMAND_SESSION_RESP(31),

    /**
     * session查询请求
     */
    COMMAND_GET_SESSION_REQ(32),

    /**
     * 查询session列表,返回
     */
    COMMAND_GET_SESSION_RESP(33),

    /**
     * session变动指令(新会话/上线/离线/触发这个操作),返回的是单个用户信息
     */
    COMMAND_CHANGE_SESSION_RESP(34),
    /**
     * chat 阅读指令
     */
    COMMAND_CHAT_READ_REQ(35),
    COMMAND_CHAT_READ_RESP(36),
    //</editor-fold>
    /**########################客服部分end###########################################**/


    /**########################IM部分开始###########################################**/
    //<editor-fold desc="IM部分">
    /**
     * <pre>
     * 聊天请求
     * </pre>
     * <p>
     * <code>COMMAND_CHAT_REQ = 101;</code>
     */
    IM_COMMAND_CHAT_REQ(101),
    /**
     * <pre>
     * 聊天响应
     * </pre>
     * <p>
     * <code>COMMAND_CHAT_RESP = 12;</code>
     */
    IM_COMMAND_CHAT_RESP(102),


    /**
     * <pre>
     * 获取聊天消息;
     * </pre>
     * <p>
     * <code>COMMAND_GET_MESSAGE_REQ = 19;</code>
     */
    IM_COMMAND_GET_MESSAGE_REQ(109),
    /**
     * <pre>
     * 获取聊天消息响应;
     * </pre>
     * <p>
     * <code>COMMAND_GET_MESSAGE_RESP = 20;</code>
     */
    IM_COMMAND_GET_MESSAGE_RESP(120),


//</editor-fold>
    /**########################IM部分结束###########################################**/

    ;

    public final int getNumber() {
        return value;
    }

    public static Command valueOf(int value) {
        return forNumber(value);
    }

    public static Command forNumber(int value) {
        for (Command command : Command.values()) {
            if (command.getNumber() == value) {
                return command;
            }
        }
        return null;
    }

    public static Command addAndGet(String name, int value) {
        return DynamicEnumUtil.addEnum(Command.class, name, new Class[]{int.class}, new Object[]{value});
    }

    private final int value;

    private Command(int value) {
        this.value = value;
    }
}

